const { Admins } = require('../models/adminsModel');
const jwt = require('jsonwebtoken');
const { TOKEN_KEY } = require('../ulities/consts');

//写请求代码
//获取所有管理员
async function getAllAdmins(req, res) {
    const {
        pageSize,
        currentPage
    } = req.body;
    // 总条数
    const total = await Admins.countDocuments();
    // 总页数
    const totalPages = Math.ceil(total / pageSize);
    // 模糊查询
    const data = await Admins
        .find()
        .limit(pageSize - 0) // 设置请求的条数
        .skip((currentPage - 1) * pageSize) // 设置跳过的条数
        // const data = await Admins.find()
    res.send({
        status: 1,
        data: {
            total,
            totalPages,
            data,
            pageSize,
            currentPage
        },
        // data,
        message: '管理员数据获取成功'
    })
}
//获取指定的管理员
async function getOneAdmin(req, res) {
    const {
        _id
    } = req.body
        // console.log(_id);
    try {
        const data = await Admins.findById(_id);
        res.send({
            status: 1,
            data,
            message: '获取管理员成功'
        })
    } catch (error) {
        res.send({
            status: 0,
            message: '获取管理员失败'
        })
    }
    const { pageSize, currentPage } = req.body;
    // 总条数
    const total = await Admins.countDocuments();
    // 总页数
    const totalPages = Math.ceil(total / pageSize);
    // 模糊查询
    const data = await Admins.find()
        .limit(pageSize - 0) // 设置请求的条数
        .skip((currentPage - 1) * pageSize); // 设置跳过的条数
    // const data = await Admins.find()
    res.send({
        status: 1,
        data: { total, totalPages, data, pageSize, currentPage },
        // data,
        message: '管理员数据获取成功',
    });
}
//获取指定的管理员
async function getOneAdmin(req, res) {
    const { _id } = req.body;
    // console.log(_id);
    try {
        const data = await Admins.findById(_id);
        res.send({
            status: 1,
            data,
            message: '获取管理员成功',
        });
    } catch (error) {
        res.send({
            status: 0,
            message: '获取管理员失败',
        });
    }
}
//修改指定管理员的信息与权限
async function updateOneAdmin(req, res) {
    const { _id, userName, password, permission, phone } = req.body;
    const data = await Admins.updateOne({
        _id,
    }, {
        userName,
        password,
        permission,
        phone,
    });
    if (data.nModified === 1) {
        res.send({
            status: 1,
            message: '管理员信息修改成功',
        });
    } else {
        res.send({
            status: 0,
            message: '管理员信息修改失败',
        });
    }
}
//新增管理员账号
async function addOneAdmin(req, res) {
    const { userName, password, permission, phone } = req.body;
    await Admins.create({
        userName,
        password,
        permission,
        phone,
    });
    // 上传头像，这里不需要
    // if (imageName) {
    //     moveFiles({
    //         fromPath: './public/temp',
    //         toPath: './public/images',
    //         filename: imageName
    //     });
    //     removeFiles('./public/temp');
    // }
    res.send({
        status: 1,
        message: '新增管理员成功',
    });
}
//管理员登录
async function AdminLogin(req, res) {
    const { userName, password } = req.body;
    const data = await Admins.find({
        userName,
        password,
    });
    if (data.length > 0) {
        if (data[0].permission == 1) {
            const loginer = {
                _id: data[0]._id,
                userName: data[0].userName,
            }
            const token = jwt.sign({
                    userName
                }, // 保存用户信息
                TOKEN_KEY, // 编码字符串
                {
                    expiresIn: 60 * 1440
                } // token 有效期(数字单位:s)
            );
            res.send({
                message: '管理员登录成功',
                status: 1,
                token,
                loginer
            });
        } else {
            res.send({
                message: '登录失败,账户被禁用',
                type: 'LOGIN_FAILED',
                status: 0
            });
        }

    } else {
        res.send({
            message: '管理员登录失败',
            type: 'LOGIN_FAILED',
            status: 0
        });
    }
}
async function deleteOneAdmin(req, res) {
    const {
        _id
    } = req.body;
    try {
        const data = await Admins.findByIdAndDelete(_id);
        if (data) {
            res.send({
                status: 1,
                message: '删除成功'
            })
        } else {
            res.send({
                status: 0,
                message: '删除失败'
            })
        }
    } catch (error) {
        console.log('删除失败', error);
        res.send({
            status: 0,
            message: '删除失败'
        })
    }
}
//暴露  每个功能
module.exports = {
    getAllAdmins,
    getOneAdmin,
    updateOneAdmin,
    addOneAdmin,
    AdminLogin,
    deleteOneAdmin

};